#include <iostream>
using namespace std;

// 1. 解决名称冲突
// 2. 返回对象本身用 *this

class Person {
public:

    Person (int age) {
        //this 指针指向 被调用的成员函数 所属的对象
        this -> age = age;
    }

    Person & Person_add_age2(Person & age ) {
        this -> age += age.age;
        return *this;
    }
    //Person 值传递方式返回 ， 会创建新对象
    //Person& 通过引用的方式来返回 ， 不会创建新对象 一直返回哪一个对象
    Person& Person_add_age(Person & p) {
        this -> age += p.age;
        return *this; // 返回对象本身用 *this
    }
    int age;
};
// 1. 解决名称冲突
void test01() {
    Person p1(18);
    cout << "p1的年龄是：" << p1.age << endl;
}

// 2. 返回对象本身用 *this
void test02() {
    Person p1(20);

    Person p2(10);
    p2.Person_add_age(p1).Person_add_age(p1);

    Person p3 (30);

    cout << "p3的age是：" << p3.age << endl;
    p3.Person_add_age2(p2).Person_add_age2(p3);
    cout << "p1的年龄是：" << p1.age << endl;
    cout << "p2的age是：" << p2.age << endl;
    cout << "p3的age是：" << p3.age << endl;

}
int main() {
    //test01();
    test02();
    return 0;
}